package com.fit.utils.se;

import java.util.*;

/**
 * 常用工具类
 * 
 * @author hcl
 * 
 */
public class Tools {
	
//	/**
//	 * root目录的绝对路径，web项目的根目录
//	 */
//	private static String rootDir = null;
//	
//	/**
//	 * classes目录的绝对路径，web项目的WEB-INF/classes/路径
//	 */
//	private static String classPathDir = null;
	
//	/**
//	 * 目录初始化
//	 */
//	static{
//		//初始化classes目录
//		classPathDir = Thread.currentThread().getContextClassLoader().getResource("").getPath();
//		//初始化项目根(root)目录 
//		rootDir = classPathDir.replaceAll("WEB-INF/classes/", "");
//	}
//	
//	
//	/**
//	 * 获取当前项目的根目录 仅作用于WEB项目时使用 结尾会有/
//	 * 
//	 * @return
//	 */
//	public static String getRootDir() {
//		return rootDir;
//	}
//
//	/**
//	 * 获取当前项目中WEB-INF/classes目录 仅作用于WEB项目时使用 结尾会有/
//	 * 
//	 * @return
//	 */
//	public static String getClassPathDir() {
//		return classPathDir;
//	}



	
	/**
	 * 对象o必equals objs数组中的一个就返回true,否则返回false
	 * objs 的长度为0时 返回false
	 * o 为null时,如果strs中也有null就返回true
	 * @param o
	 * @param objs
	 * @return
	 * @author hcl
	 */
	public static boolean equals(Object o,Object ... objs){
		boolean flag = false;
		if(EmptyUtils.isNotEmpty(objs)){
			if(o == null){
				for(Object obj : objs){
					if(obj == null){
						flag = true;
						break;
					}
				}
			}else{
				for(Object obj : objs){
					if(o.equals(obj)){
						flag = true;
						break;
					}
				}
			}
		}
		return flag;
	}

	/**
	 * 对象o必equals collection集合中的一个就返回true,否则返回false
	 * objs 的长度为0时 返回false
	 * o 为null时,如果strs中也有null就返回true
	 * @param o
	 * @param collection
	 * @return
	 * @author hcl
	 */
	public static boolean equals(Object o, Collection<?> collection){
		return equals(o,collection.toArray());
	}
	
	/**
	 * 字符串s必equals strs数组中的一个就返回true，否则返回false(不区分大小写)
	 * strs 的长度为0时 返回false
	 * s 为null时,如果strs中也有null就返回true
	 * @param s
	 * @param strs
	 * @return
	 * @author hcl
	 */
	public static boolean equalsNotDistinguish(String s,String ... strs){
		boolean flag = false;
		if(EmptyUtils.isNotEmpty(strs)){
			if(s == null){
				for(String str : strs){
					if(str == null){
						flag = true;
						break;
					}
				}
			}else{
				s = s.toUpperCase();
				for(String str : strs){
					if(s.equals(str.toUpperCase())){
						flag = true;
						break;
					}
				}
			}
		}
		return flag;
	}

	/**
	 * 字符串s必equals collection集合中的一个就返回true，否则返回false(不区分大小写)
	 * strs 的长度为0时 返回false
	 * s 为null时,如果strs中也有null就返回true
	 * @param s
	 * @param collection
	 * @return
	 * @author hcl
	 */
	public static boolean equalsNotDistinguish(String s,Collection<String> collection){
		return equalsNotDistinguish(s,collection.toArray(new String[collection.size()]));
	}

	/**
	 * @describe: 删除集合中为null的元素
	 * @author: hcl  
	 * @date: 2018/8/10 14:18
	 * @param: [collection]  
	 * @return java.util.Collection<?>  
	 */
	public static <T extends Collection> T removeNull(T collection){
		if(EmptyUtils.isEmpty(collection)){
			return collection;
		}
		List<Object> list = new ArrayList<>(collection.size());
		for(Object obj : collection){
			if(EmptyUtils.isNotEmpty(obj)){
				list.add(obj);
			}
		}
		return (T)list;
	}

	/**
	 * @describe: 删除mapkey为null的数据，如果value为null也需要删除，valueNull传入true
	 * @author: hcl  
	 * @date: 2018/8/10 14:39
	 * @param: [map, value]  
	 * @return java.util.Map<?,?>  
	 */
	public static <T extends Map> T removeNull(T map,boolean valueNull){
		if(EmptyUtils.isEmpty(map)){
			return map;
		}
		Map<Object,Object> mapTemp = new HashMap<>(map.size());
		Iterator<Map.Entry<?,?>> it = map.entrySet().iterator();
		while(it.hasNext()){
			Map.Entry<?,?> entry = it.next();
			if(EmptyUtils.isEmpty(entry.getKey())){
				continue;
			}
			if(valueNull && EmptyUtils.isEmpty(entry.getValue())){
				continue;
			}
			mapTemp.put(entry.getKey(),entry.getValue());
		}
		return (T)mapTemp;
	}


	/**
	 * @describe: 删除map key为null的数据
	 * @author: hcl  
	 * @date: 2018/8/10 14:45
	 * @param: [map]  
	 * @return T  
	 */
	public static <T extends Map> T removeNull(T map){
		return removeNull(map,false);
	}




}
